Day 25 이차원 리스트(배열)
Day 단계 2023-11-15
1. 정수를 나선형으로 배치하기
- 내 풀이 : 방향 이동별로 범위와 조건을 설정해서 코드가 매우 길다.
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int[] rightRange = {0, n-1};
int[] downRange = {1, n-1};
int[] leftRange = {n-2, 0};
int[] upRange = {n-2, 1};
int rigthrow = 0;
int downcol = n-1;
int leftrow = n-1;
int upcol = 0;
for (int i = 1; i <= n*n;) {
for (int right = rightRange[0]; right <= rightRange[1]; right++) {
if (i>n*n) break;
answer[rigthrow][right] = i++;
}
if (rightRange[0]!=rightRange[1]) {
rightRange[0]++; rightRange[1]--;
rigthrow++;
}
for (int down = downRange[0]; down <= downRange[1]; down++) {
if (i>n*n) break;
answer[down][downcol] = i++;
}
if (downRange[0]!=downRange[1]) {
downRange[0]++; downRange[1]--;
downcol--;
}
for (int left = leftRange[0]; left >= leftRange[1]; left--) {
if (i>n*n) break;
answer[leftrow][left] = i++;
}
if (leftRange[0]!=leftRange[1]) {
leftRange[0]--; leftRange[1]++;
leftrow--;
}
for (int up = upRange[0]; up >= upRange[1]; up--) {
if (i>n*n) break;
answer[up][upcol] = i++;
}
if (upRange[0]!=upRange[1]) {
upRange[0]--; upRange[1]++;
upcol++;
}
}
return answer;
}
}
- 다른 사람 풀이들 : 훨씬 짧고 간단하다.
- https://school.programmers.co.kr/learn/courses/30/lessons/181832/solution_groups?language=java
- 구조적으로 가장 비슷했던 다른 사람의 코드는 while에서 조건을 넣어 훨씬 간결하게 표현했다.
- 원본 코드 첨부
int[][] array = new int[n][n];
int num = 1;
int rowStart = 0;
int rowEnd = n - 1;
int colStart = 0;
int colEnd = n - 1;
while (rowStart <= rowEnd && colStart <= colEnd) {
for (int i = colStart; i <= colEnd; i++) { // 오른쪽 이동 시 열의 범위에 영향받음
array[rowStart][i] = num++; // 오른쪽으로 이동하며 채우기
}
rowStart++; // 다음 행 시작 위치 설정
for (int i = rowStart; i <= rowEnd; i++) { // 아래쪽 이동 시 행의 범위에 영향받음
array[i][colEnd] = num++; // 아래쪽으로 이동하며 채우기
}
colEnd--; // 다음 열 시작 위치 설정
for (int i = colEnd; i >= colStart; i--) { // 왼쪽으로 이동 시 열의 범위에 영향받음
array[rowEnd][i] = num++; // 왼쪽으로 이동하며 채우기
}
rowEnd--; // 다음 행 시작 위치 설정
for (int i = rowEnd; i >= rowStart; i--) { // 위쪽으로 이동 시 행의 범위에 영향받음
array[i][colStart] = num++; // 위쪽으로 이동하며 채우기
}
colStart++; // 다음 열 시작 위치 설정
}